package com.wmcsk.interfaces;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import com.hpplay.bean.CastDeviceInfo;
import com.hpplay.bean.WebPushInfo;
import com.hpplay.callback.CastDeviceCallback;
import com.hpplay.callback.CastDeviceServiceCallback;
import com.hpplay.callback.ConnectStateCallback;
import com.hpplay.callback.ExecuteResultCallBack;
import com.hpplay.callback.HpplayWindowPlayCallBack;
import com.hpplay.callback.MirrorStateCallback;
import java.util.List;

/**
 * Created by wm on 2018/3/21.
 */

public interface KuaiyanVideoShadowSdkInterface {
    /**
     * 获取插件版本号
     * @return
     */
    String getVersion();
    /**
     * 初始化插件
     * @param context
     * @param initResultListener
     */
    void init(Context context, InitResultListener initResultListener);

    /**
     * 获取sdk基本信息
     * @return
     */
    String getSdkInfo();
    /**
     * 搜索设备
     * @param context
     * @param castDeviceCallback
     */
    void castServiceDiscovery(Context context, CastDeviceServiceCallback castDeviceCallback);

    /**
     * 直接投屏
     * @param activity
     * @param hpplayWindowPlayCallBack
     */
    void showHpplayWindow(Activity activity, HpplayWindowPlayCallBack hpplayWindowPlayCallBack);

    /**
     * 投屏多媒体地址，可实现推送功能
     * @param activity
     * @param url
     * @param position
     * @param hpplayWindowPlayCallBack
     * @param pushType
     */
    void showHpplayWindow(Activity activity, String url, int position,
                          HpplayWindowPlayCallBack hpplayWindowPlayCallBack, int pushType);

    /**
     * 多媒体投屏，不指定视屏播放位置，实现推送流媒体地址功能
     * @param activity
     * @param url
     * @param hpplayWindowPlayCallBac
     * @param pushType
     */
    void showHpplayWindow(Activity activity, String url, HpplayWindowPlayCallBack
            hpplayWindowPlayCallBac, int pushType);

    /**
     * 获取连接状态
     * @return
     */
    boolean isConnect();
    /**
     * 获取屏幕镜像状态
     * @return
     */
    boolean getMirrorState();

    /**
     * 释放连接设备资源
     */
    void castDisconnectDevice();

    /**
     * 停止搜索设备
     */
    void castServiceStopDiscovery();

    /**
     * 指定连接到电视实体
     * @param castDeviceInfo
     * @param connectStateCallBack
     */
    void castConnectDevice(CastDeviceInfo castDeviceInfo, ConnectStateCallback
            connectStateCallBack);

    /**
     * 不指定开始播放位置，即电视端接收到资源地址后从头开始播放
     * @param ExecuteResultCallBack
     * @param port
     * @param url
     * @param pushType
     */
    void castStartMediaPlay(ExecuteResultCallBack ExecuteResultCallBack, int port, String
            url, int pushType);

    /**
     * 指定开始播放位置，即电视端接收到资源地址后从指定位置开始播放
     * @param ExecuteResultCallBack
     * @param port
     * @param url
     * @param pushType
     * @param position
     */
    void castStartMediaPlay(ExecuteResultCallBack ExecuteResultCallBack, int port, String url, int
            pushType, int position);

    /**
     * 控制已推送到电视端成功的多媒体的播放暂停
     * @param ExecuteResultCallBack
     * @param port
     * @param isPlay
     */
    void castPlayControl(ExecuteResultCallBack ExecuteResultCallBack, int port, boolean isPlay);

    /**
     * 通过此接口调用控制已推送到电视端成功的多媒体的播放进度，单位为秒/S,可快进、退后播放
     * @param ExecuteResultCallBack
     * @param port
     * @param rate
     */
    void castSeek(ExecuteResultCallBack ExecuteResultCallBack, int port, int rate);

    /**
     * 通过此接口调用控制已推送到电视端成功的多媒体的音量大小
     * @param ExecuteResultCallBack
     * @param port
     * @param isAddVolume
     */
    void castDeviceVolume(ExecuteResultCallBack ExecuteResultCallBack, int port, boolean
            isAddVolume);

    /**
     * 通过此接口调用控制已推送到电视端成功的多媒体的音量大小。前制条件为有获取到电视端的播放多媒体的总音量大小
     * @param ExecuteResultCallBack
     * @param port
     * @param volume
     */
    void castDeviceVolume(ExecuteResultCallBack
                                  ExecuteResultCallBack, int port, int volume);

    /**
     * 通过此接口调用停止推送到电视的多媒体播放,可退出电视端正在播放在多媒体资源
     * @param ExecuteResultCallBack
     * @param port
     */
    void stopPlay(ExecuteResultCallBack
                          ExecuteResultCallBack, int port);

    /**
     * 通过此接口调用获取推送到电视的多媒体播放的状态信息,如电视端是否正在播放，播放 到什么进度，电视当前播放音量为多大
     * @param castDeviceCallback
     */
    void castDeviceCallback(CastDeviceCallback castDeviceCallback);

    /**
     *  通过此接口调用已推送并在电视端播放的多媒体是否随接入SDK的退出去退出电视播放。 在接入SDK退出后，如果有在接入SDK整个退出或者接入APK退出后，需要已推送到电视的并在播放的多媒体资源也需要一同退出，可用此接口实现
     * @param ExecuteResultCallBack
     * @param port
     * @param isBack
     */
    void setIsBackgroundPlay(ExecuteResultCallBack ExecuteResultCallBack, int port, boolean
            isBack);
    /**
     * 返回true为支持弹幕功能，false为不支持弹幕功能
     */

    boolean isHasWebPush();

    /**
     * 通过此接口调用设置电视端要显示的弹幕内容字体大小。最大字体随电视端的分辨率大小不定，可不设置，不设置时电视端字体大小随分辨率自适应
     * @param ExecuteResultCallBack
     * @param port
     * @param size
     */
    void setWebPushSize(ExecuteResultCallBack ExecuteResultCallBack, int port, int size);

    /**
     * 通过此接口调用设置电视端要显示的弹幕内容显示位置，分为弹幕显示在电视顶部或者电 视底部，默认为显示在电视顶部
     * @param ExecuteResultCallBack
     * @param port
     * @param isBottom
     */
    void setWebPushIsBottom(ExecuteResultCallBack ExecuteResultCallBack, int port, boolean
            isBottom);

    /**
     * 通过此接口调用设置电视端要显示的弹幕内容显示是否重叠，默认为显示重叠
     * @param ExecuteResultCallBack
     * @param port
     * @param isOverlap
     */
    void setWebPushOverlap(ExecuteResultCallBack ExecuteResultCallBack, int port, boolean
            isOverlap);

    /**
     * 通过此接口调用设置电视端要显示的弹幕内容显示是否隐藏，默认为显示显示
     * @param ExecuteResultCallBack
     * @param port
     * @param isShow
     */
    void setWebPushVisibility(ExecuteResultCallBack ExecuteResultCallBack, int port, boolean
            isShow);

    /**
     * 通过此接口调用设置电视端要显示的弹幕内容显示是否暂停播放，默认为播放
     * @param ExecuteResultCallBack
     * @param port
     * @param isPlay
     */
    void setWebPushPlay(ExecuteResultCallBack ExecuteResultCallBack, int port, boolean isPlay);

    /**
     * 通过此接口调用设置电视端要显示的弹幕内容字体透明度，0〜255之间，数值越大越不透 明。默认为255,全不透明
     * @param ExecuteResultCallBack
     * @param port
     * @param alpha
     */
    void setWebPushAlpha(ExecuteResultCallBack ExecuteResultCallBack, int port, int alpha);

    /**
     * 通过此接口调用设置电视端要显示的弹幕内容最大显示行数。最大行数随电视端的分辨率 大小不定，默认为电视端分辨率自适应行数
     * @param ExecuteResultCallBack
     * @param port
     * @param maxline
     */
    void setWebPushMaxLine(ExecuteResultCallBack
                                   ExecuteResultCallBack, int port, int maxline);

    /**
     * 通过此接口调用设置电视端要显示的弹幕内容每列的移动速度。1.0~5.0之间，数值越大 速度越慢。默认为速度为3.0
     * @param ExecuteResultCallBack
     * @param port
     * @param speed
     */
    void setWebPushSpeed(ExecuteResultCallBack ExecuteResultCallBack, int port, float speed);

    /**
     * 通过此接口调用设置电视端要显示的弹幕内容，推送内容为第三方用户的弹幕内容集合
     * @param ExecuteResultCallBack
     * @param port
     * @param webPushList
     * @param type
     */
    void sendOtherBeantoJSon(ExecuteResultCallBack
                                     ExecuteResultCallBack, int port, List<WebPushInfo> webPushList, int type);

    /**
     * 通过此接口调用设置电视端要显示的弹幕内容，推送内容为第三方用户的单条弹幕内容
     * @param ExecuteResultCallBack
     * @param port
     * @param webPushInfo
     * @param type
     */
    void sendOtherSingleBeantoJSon(ExecuteResultCallBack ExecuteResultCallBack, int port,
                                   WebPushInfo webPushInfo, int type);

    /**
     * 通过此接口调用设置电视端要显示的弹幕内容，推送内容为用户的单条弹幕内容
     * @param ExecuteResultCallBack
     * @param port
     * @param webPushInfo
     * @param type
     */
    void sendUserSingleBeantoJSon(ExecuteResultCallBack ExecuteResultCallBack, int port,
                                  WebPushInfo webPushInfo, int type);

    /**
     * 通过此接口调用可对推屏移动端屏幕到电视显示
     * @param activity
     * @param mirrorStateCallBack
     */
    void castStartMirror(Activity activity, MirrorStateCallback mirrorStateCallBack);

    /**
     * 通过此接口调用可对推屏移动端屏幕到电视显示时，需要用户进行权限确认，必需在onActivityResult方法中调用,否则镜像功能不可用
     * @param requestCode
     * @param resultCode
     * @param data
     */
    void castStartMirrorResult(int requestCode, int
            resultCode, Intent data);

    /**
     * 通过此接口调用停止推送到电视的推屏(镜像)
     */
    void castStopMirror();

    /**
     * 通过此接口调用推送图片地址到电视端进行播放
     * @param ExecuteResultCallBack
     * @param port
     * @param url
     */
    void startPhotoPlay(ExecuteResultCallBack ExecuteResultCallBack, int port, String url);
    /**
     * 通过此接口调用停止图片地址到电视端进行播放
     * @param ExecuteResultCallBack
     * @param port
     */
    void stopPhotoPlay(ExecuteResultCallBack
                               ExecuteResultCallBack, int port);

    /**
     * 通过此接口调用退出图片推送链接
     * @param ExecuteResultCallBack
     * @param port
     */
    void quitPhotoPlay(ExecuteResultCallBack
                               ExecuteResultCallBack, int port);

    Context getContext();

    void dismissHpplayWindow();

    CastDeviceInfo getCastDeviceInfo();

    void setDebug(boolean debug);
}
